package main

import (
	"flag"
	"fmt"
	"github.com/kataras/iris/v12"
	log "github.com/sirupsen/logrus"
	"os"
)

var runPort = flag.String("port", ":8355", "运行端口")

func init() {
	// Log as JSON instead of the default ASCII formatter.
	log.SetFormatter(&log.TextFormatter{})

	// Output to stdout instead of the default stderr
	// Can be any io.Writer, see below for File example
	log.SetOutput(os.Stdout)

	// Only log the warning severity or above.
	//log.SetLevel(log.InfoLevel)
}
func main() {
	flag.Parse()
	fmt.Println("指定了运行端口: ", *runPort)
	app := iris.New()
	app.Use(myMiddleware)
	// 这是 JRebel 部分
	app.Any("/jrebel/leases", LeaseLicense)
	app.Any("/jrebel/leases/1", Lease1License)
	app.Any("/agent/leases", LeaseLicense)
	app.Any("/agent/leases/1", Lease1License)
	app.Any("/jrebel/validate-connection", ValidateLicense)
	// 这是 JetBrains 部分
	app.Any("/rpc/ping.action", PingAction)
	app.Any("/rpc/obtainTicket.action", ObtainTicketAction)
	app.Any("/rpc/prolongTicket.action", ProlongTicketAction)
	app.Any("/rpc/releaseTicket.action", ReleaseTicketAction)
	app.Any("/", MainAction)
	// 未来考虑把 IDEA 也支持一下
	err := app.Listen(*runPort)
	if err != nil {
		panic(err)
	}

}

func MainAction(context iris.Context) {
	reponse := `
[Result]
# 用于对抗服务器
EQUAL,246594614993728734422293335845334190159455836476183584025753678939078399217432989868152347074806272974547484035389638846405072590292670754142010306376806211713411441105415853335085047367423433765235370160480417439219949823174015794786957647628930430999296944242047122723296269207451777237728902812450954692761761885876172465684126451993948360053016828450474403562248562225389679802994855044433081265694449426442770933653696105163335630435282925453161975642143257681315852037027600714660132459914059761373948798584223817726203739469313137421878933906492226107050208573181511111290338112432718944759944839756474614599037173012592627503110956591336833645142910666836007532556112372513109212004602605078776338910773346402246740510946475538227170190101518678015827933306659895347504442612261917433192351518659766853909582482287006620359752988870519642095483408317709428372786477125409590090407512621423605817643874854739354213579326061555809641580263743992491094753422553445779679250920249146647463984156510645054014897441278903618122601849336001258008377861017618234444131234897659853910382041080125140466448049860227267683069301286774794333309737346061912513477735026662209465178402581215934114871225672491078557869956390718987897556703,65537,860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193910874316110681288076655386750201479843352270239702510498403316135342414677799
EQUAL,281724937032250789626698465721413012916118714241857707918145826005535827526339231250802542620217745867311227785747137241438032319488213251216519480683244678399987608580968028928523681655916480131211654020419968854537179989419843386857719237077723176018001762209823759930853378532544073366155238847768075373147289589933292918454261776097012507837949258473349957843767038727010261404168654991257729554524916205659093441608999170892968446315231291083825145958245073778761613027260750942615017077185459051352814920588448830904648177544216234965687583094948903565847929901142569043367877739436883550022226927336423817367676962205603801021598329610827474879694142400560617013259919243766205859914733877660785300406368293490682357768552189284810628091372158138022396008470453254345377057082779483850637503449748309932712141047049283938118873849285237999653002120021358198311324910118437621877961437579892900640091475743866257770703623472900256031531956677102753572505267797882886920080582616382333932003953486416987173641019924486893121551538041999421784861583417686465535718565926612127248167088383614425014838755070127236766871301813459067838589966035952651384467354711560587227339216747598970090976897909569454838442688421400553127027366,65537,657823416415964932845156435107145357714205418747915356734397055242964933221752404166614935255105249101653916721681603662754307632457128805443068644284748929421507178622933348669378235847742899773920765918770105482851534467296284105250512573151705220224379509383835022323282176179690146311979451556541118129344282127375534752754929526193258755897888515754328964698687671896985405008425332766082319260988023654359845072776189451448786758245414253386146246727354454047135428416624852422567360097346671648093064429279847823280592246506886401865455491924420415707803245018138595108029359998829520236522620749918729938206134739331246902031807601266419258080411903201595710155467901291142142443220333539750397923736434950558371997170985472272249812750161962720036837656464089126216749585148030883029438285184930024286517865710539947589764564204842426698322404033441531662829238875205420761652375337327297032255730262635511533223504109798364923988127319356119135982652788834405038113746394301957551167740345788175766290794604666781402329824924118191746319728033878045396093674696713022814027690165596773992550010915823534552020920573926469894452526033833249442230929742486602298477270672101197444729222659891038350303699501280729658274069437->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193868850310063174165698051438583866015412937928889499109045869027678206153833943
`
	context.WriteString(reponse)
}

func myMiddleware(ctx iris.Context) {
	//ctx.Application().Logger().Infof("以 %s 方式请求了: %s", ctx.Method(), ctx.Path())
	log.WithFields(log.Fields{
		"method": ctx.Method(),
		"path":   ctx.Path(),
	}).Info("请求服务器")
	//log.WithFields(logrus.Fields{
	//	"path": ctx.Path(),
	//}).Info("请求了: ")
	ctx.Next()
}
